In [1]:
%pylab inline
import matplotlib.pyplot as plt

import collections

from IPython.core.display import HTML
Populating the interactive namespace from numpy and matplotlib
In [2]:
HTML('''<script>
code_show=true;
function code_toggle() {
 if (code_show){
 $('div.input').hide();
 } else {
 $('div.input').show();
 }
 code_show = !code_show
}
$( document ).ready(code_toggle);
</script>
<form action="javascript:code_toggle()"><input type="submit"
value="Click here to toggle on/off the raw code."></form>''')
Out[2]:
In [3]:
# Az abra kimentesehez az alabbiakat a plt.show()  ele kell tenni!!! 

#savefig('fig_rainbow_p2_1ray.pdf');  # Abra kimentese
#savefig('fig_rainbow_p2_1ray.eps');  # Abra kimentese

# Abra es fontmeretek
xfig_meret= 8  #    12 nagy abrahoz
yfig_meret= 6    #   12 nagy abrahoz
xyticks_meret= 15  #  20 nagy abrahoz
xylabel_meret= 20  #  30 nagy abrahoz
legend_meret= 21   #  30 nagy abrahoz
In [4]:
def free_en(kp, Gvec):
    
    # Gvec --->   G vectors

    eig_en = []
    for G in Gvec:   
        eig_en.append(dot((kp-G),(kp-G)))
        
    return sort(eig_en)
In [5]:
def Ham_op(kv, Gvec, params):
    
    # Dirac-delta szennyezok a racsatomokon 
    # Hsize = the size of the ham matrix, input
    
    w = params  # w ----> a Dirac-delta potencial erossege, input
    
    Hsize = len(Gvec)
    Ham = w*ones((Hsize,Hsize))  # a Ham Hamiltonian matrix minden eleme = w
    
    # a Ham diagonalis elemei = a kinetic energy:
    i=0
    for g in Gvec:    
        Ham[i,i] = dot(kv-g,kv-g)
        i +=1
        
    return Ham

Free electron bands

$E_n(\mathbf{k})=\frac{\hbar^2}{2m}\, {\left(\mathbf{k}-\mathbf{G}_n\right)}^2 $

Energy in units of $\frac{\hbar^2}{2m}\, {\left(\frac{2\pi}{a}\right)}^2$,

wave number $k$ in units of $2\pi/a$, where $a$ is the lattice constant.

Simple cubic lattice

In [6]:
## simple cubic lattice 

Npoints = 50;  ## hany pontbol keszul a gorbe
ymax = 3.1;

## unit cell vectors of the reciprocal vectors:
##  in units of 2 pi/a

b1 = array([1,0,0])
b2 = array([0,1,0])
b3 = array([0,0,1])

## high symmetry points in the Brillouin zone
## FONTOS: a fenti abra szerinti pontokat kell venni,
## a szomszedos spec. k pontokat kell venni.
Gp = array([0,0,0])
Xp = 0.5*array([0,1,0])
Rp = 0.5*array([1,1,1])
Mp = 0.5*array([1,1,0])

# creating the reciprocal vectors: 
Gnum = 2  #### (2*Gnum+1)**3, number of Gvec
indx=array(range(-Gnum,Gnum+1))
Gvec = []
for n1 in indx:
    for n2 in indx:
        for n3 in indx:
            Gvec.append(n1*b1+n2*b2+n3*b3)

specNev_map = {tuple(Gp):"$\Gamma$",tuple(Xp):"$X$",tuple(Mp):"$M$",
               tuple(Rp):"$R$"}

figsize(xfig_meret,yfig_meret)

##  G-X-M-G-R-X line
specpoints = array([Gp,Xp,Mp,Gp,Rp,Xp])

klist = []
specpos = [0]
kk = [0]
tmp = 0
for i in (range(len(specpoints)-1)):
    sl = specpoints[i+1]-specpoints[i]  
    sl_hossz = sqrt(dot(sl,sl))
    dk = sl/Npoints
    for num in arange(0,Npoints):
        # k vector along the line given by speclines:
        klist.append(specpoints[i] + num*dk)
        # length of the k vector and shifted: 
        tmp +=  sqrt(dot(dk,dk)) 
        kk.append(tmp) 
    specpos.append(tmp)

klist.append(klist[-1]+dk)   

enlist = []
for i in klist:
    enlist.append(free_en(i, Gvec))

enlist= array(enlist)

eigszam= len(enlist[0,:])
print("The # of eigenvalues = ",eigszam,"= # of G vectors =",len(Gvec))

#specNev = ["$\Gamma$","$X$","$M$","$\Gamma$","$R$","$X$"]




# drawing the figure
figsize(xfig_meret,yfig_meret)

for ii in range(0,len(enlist[0,:])):
    plot(kk,enlist[:,ii],color='r')


i = 0
for xc in specpos:
    axvline(x=xc,color='b')
    text(xc*0.95,-0.2,specNev_map[tuple(specpoints[i])],fontsize=xylabel_meret)
    i=i+1

###  Brillouin zone Volume: 
VBZ= dot(b3,cross(b1,b2))
print("Volume of the Brilouin zone = ", VBZ,"\n")

###  Fermi energy: 
EF_vec = []
for n in range(1,9):
    tmp = (3/8/pi*VBZ*n)**(2/3)
    EF_vec.append(tmp)
    print("Electrons per unit cell = ", n, ", Fermi energy = ",round(tmp,3))

## horizontal line at Fermi energies:
i=1
for ef in EF_vec:
    plt.axhline(y=ef, color='b',ls='--') 
    nel = str(i)
    text(specpos[-1]*1.05,ef*0.97,nel,fontsize=10)
    i +=1

    
ylabel(r'$E(k)$',fontsize=xylabel_meret)

#  kikapcsoljuk a xticks: 
xticks([], [])

xlim(0,specpos[-1])
ylim(0,ymax)

title("simple cubic",fontsize=xylabel_meret)

grid();


    
#savefig('fifi.eps');  # Abra kimentese
The # of eigenvalues =  125 = # of G vectors = 125
Volume of the Brilouin zone =  1 

Electrons per unit cell =  1 , Fermi energy =  0.242
Electrons per unit cell =  2 , Fermi energy =  0.385
Electrons per unit cell =  3 , Fermi energy =  0.504
Electrons per unit cell =  4 , Fermi energy =  0.611
Electrons per unit cell =  5 , Fermi energy =  0.709
Electrons per unit cell =  6 , Fermi energy =  0.8
Electrons per unit cell =  7 , Fermi energy =  0.887
Electrons per unit cell =  8 , Fermi energy =  0.97
In [7]:
## calculation of degeneracy 

print("\nDegeneracy at the special k points without Dirac delta potential: \n=================================\n")
i=0
for sp in specpoints:
    se = free_en(sp, Gvec)
    sajatertekek =[ round(x,2) for x in se]
    
    deg=collections.Counter(sajatertekek);
    
    keys = sorted(deg.keys())
    
    print("\nDegeneracies in the %s point:" % specNev_map[tuple(specpoints[i])])
    for element in keys:
        print("Energy: %.2f, degeneracy: %d" % ( element, deg[element]))
    
    i +=1

print("\n")
Degeneracy at the special k points without Dirac delta potential: 
=================================


Degeneracies in the $\Gamma$ point:
Energy: 0.00, degeneracy: 1
Energy: 1.00, degeneracy: 6
Energy: 2.00, degeneracy: 12
Energy: 3.00, degeneracy: 8
Energy: 4.00, degeneracy: 6
Energy: 5.00, degeneracy: 24
Energy: 6.00, degeneracy: 24
Energy: 8.00, degeneracy: 12
Energy: 9.00, degeneracy: 24
Energy: 12.00, degeneracy: 8

Degeneracies in the $X$ point:
Energy: 0.25, degeneracy: 2
Energy: 1.25, degeneracy: 8
Energy: 2.25, degeneracy: 10
Energy: 3.25, degeneracy: 8
Energy: 4.25, degeneracy: 16
Energy: 5.25, degeneracy: 16
Energy: 6.25, degeneracy: 9
Energy: 7.25, degeneracy: 20
Energy: 8.25, degeneracy: 12
Energy: 10.25, degeneracy: 12
Energy: 11.25, degeneracy: 8
Energy: 14.25, degeneracy: 4

Degeneracies in the $M$ point:
Energy: 0.50, degeneracy: 4
Energy: 1.50, degeneracy: 8
Energy: 2.50, degeneracy: 8
Energy: 3.50, degeneracy: 16
Energy: 4.50, degeneracy: 12
Energy: 5.50, degeneracy: 8
Energy: 6.50, degeneracy: 20
Energy: 7.50, degeneracy: 8
Energy: 8.50, degeneracy: 12
Energy: 9.50, degeneracy: 8
Energy: 10.50, degeneracy: 8
Energy: 12.50, degeneracy: 9
Energy: 13.50, degeneracy: 2
Energy: 16.50, degeneracy: 2

Degeneracies in the $\Gamma$ point:
Energy: 0.00, degeneracy: 1
Energy: 1.00, degeneracy: 6
Energy: 2.00, degeneracy: 12
Energy: 3.00, degeneracy: 8
Energy: 4.00, degeneracy: 6
Energy: 5.00, degeneracy: 24
Energy: 6.00, degeneracy: 24
Energy: 8.00, degeneracy: 12
Energy: 9.00, degeneracy: 24
Energy: 12.00, degeneracy: 8

Degeneracies in the $R$ point:
Energy: 0.75, degeneracy: 8
Energy: 2.75, degeneracy: 24
Energy: 4.75, degeneracy: 24
Energy: 6.75, degeneracy: 20
Energy: 8.75, degeneracy: 24
Energy: 10.75, degeneracy: 12
Energy: 12.75, degeneracy: 6
Energy: 14.75, degeneracy: 6
Energy: 18.75, degeneracy: 1

Degeneracies in the $X$ point:
Energy: 0.25, degeneracy: 2
Energy: 1.25, degeneracy: 8
Energy: 2.25, degeneracy: 10
Energy: 3.25, degeneracy: 8
Energy: 4.25, degeneracy: 16
Energy: 5.25, degeneracy: 16
Energy: 6.25, degeneracy: 9
Energy: 7.25, degeneracy: 20
Energy: 8.25, degeneracy: 12
Energy: 10.25, degeneracy: 12
Energy: 11.25, degeneracy: 8
Energy: 14.25, degeneracy: 4


Simple cubic lattice with Dirac delta potential

In [8]:
## simple cubic lattice 

Npoints = 50;  ## hany pontbol keszul a gorbe
ymax = 2.1;

w = -0.01 #### w =-0.1 ---> a Dirac-delta potencial erossege, input
params=[w]

print("The # of G vectors = (2*Gnum+1)**3 = ", (2*Gnum+1)**3)
print("w = ",w)

## unit cell vectors of the reciprocal vectors:
##  in units of 2 pi/a

b1 = array([1,0,0])
b2 = array([0,1,0])
b3 = array([0,0,1])

## high symmetry points in the Brillouin zone
## FONTOS: a fenti abra szerinti pontokat kell venni,
## a szomszedos spec. k pontokat kell venni.
Gp = array([0,0,0])
Xp = 0.5*array([0,1,0])
Rp = 0.5*array([1,1,1])
Mp = 0.5*array([1,1,0])

# creating the reciprocal vectors: 
Gnum = 1  #### (2*Gnum+1)**3, number of Gvec
indx=array(range(-Gnum,Gnum+1))
Gvec = []
for n1 in indx:
    for n2 in indx:
        for n3 in indx:
            Gvec.append(n1*b1+n2*b2+n3*b3)

specNev_map = {tuple(Gp):"$\Gamma$",tuple(Xp):"$X$",tuple(Mp):"$M$",
               tuple(Rp):"$R$"}

figsize(xfig_meret,yfig_meret)

##  G-X-M-G-R-X line
specpoints = array([Gp,Xp,Mp,Gp,Rp,Xp])

klist = []
specpos = [0]
kk = [0]
tmp = 0
for i in (range(len(specpoints)-1)):
    sl = specpoints[i+1]-specpoints[i]  
    sl_hossz = sqrt(dot(sl,sl))
    dk = sl/Npoints
    for num in arange(0,Npoints):
        # k vector along the line given by speclines:
        klist.append(specpoints[i] + num*dk)
        # length of the k vector and shifted: 
        tmp +=  sqrt(dot(dk,dk)) 
        kk.append(tmp) 
    specpos.append(tmp)

klist.append(klist[-1]+dk)   

enlist = []
for kv in klist:
    enlist.append(free_en(kv, Gvec))

enlist= array(enlist)

enlistw = []
for kv in klist:
    enlistw.append(eigvalsh(Ham_op(kv, Gvec, params)))
    
enlistw= array(enlistw)

eigszam= len(enlist[0,:])
print("The # of eigenvalues = ",eigszam,"= # of G vectors =",len(Gvec))
  
specNev = ["$\Gamma$","$X$","$M$","$\Gamma$","$R$","$X$"]

    
# drawing the figure
figsize(10,5)

subplot(121)

for ii in range(0,len(enlist[0,:])):
    plot(kk,enlist[:,ii],color='r')

i = 0
for xc in specpos:
    axvline(x=xc,color='b')
    text(xc,-0.2,specNev_map[tuple(specpoints[i])],fontsize=xylabel_meret)
    i=i+1   
    
ylabel(r'$E(k)$',fontsize=xylabel_meret)

#  kikapcsoljuk a xticks: 
xticks([], [])

xlim(0,specpos[-1])
ylim(0,ymax)

cim = "sc, w="+str(0)
title(cim,fontsize=xylabel_meret)

grid();


subplot(122)

for ii in range(0,len(enlist[0,:])):
    plot(kk,enlistw[:,ii],color='r')

i = 0
for xc in specpos:
    axvline(x=xc,color='b')
    text(xc,-0.2,specNev[i],fontsize=xylabel_meret)
    i=i+1
    
#ylabel(r'$E(k)$',fontsize=xylabel_meret)

#  kikapcsoljuk a xticks: 
xticks([], [])

xlim(0,specpos[-1])
ylim(-0.0,ymax)

cim = "sc, w="+str(w)
title(cim,fontsize=xylabel_meret)

grid();
The # of G vectors = (2*Gnum+1)**3 =  125
w =  -0.01
The # of eigenvalues =  27 = # of G vectors = 27
In [9]:
#sort(free_en(Gp, Gvec)), eigvalsh(Ham_op(Gp, Gvec, params))

Free electron bands for fcc lattice

Brillouin zone with high symmetry $\mathbf{k}$ points

Special points in the Brillouin zone (in units of $2\pi/a$):

Point Cartesian coordinates (in units of $2\pi/a$)
G array([0,0,0])
X array([0,1,0])
W array([1/2,1,0])
K array([3/4,3/4,0])
L array([1/2,1/2,1/2])
U array([1/4,1,1/4])

U,K points together !!!!!!!!

Sólyom Jenő: A modern szilárdtest-fizika alapjai II.

Fémek, félvezetők, szupravezetők, 881. old., 20.1 ábra

In [10]:
## fcc lattice:

Npoints = 70;  ## hany pontbol keszul a gorbe
ymax = 4.5;

## unit cell vectors of the reciprocal vectors:
##  in units of 2 pi/a

b1 = array([-1,1,1])
b2 = array([1,-1,1])
b3 = array([1,1,-1])

## high symmetry points in the Brillouin zone
## FONTOS: a szomszedos spec. k pontokat kell venni 
## (ezek most nem a fenti abranak megfelelo pontok, de szomszedos pontok, 
## es igy jo az abra)
Gp = array([0,0,0])
Xp = array([0,1,0])
Wp = array([1/2,1,0])
Kp = array([3/4,3/4,0])
Lp = array([1/2,1/2,1/2])
Up = array([1/4,1,1/4])


# creating the reciprocal vectors: 
Gnum = 2  #### (2*Gnum+1)**3, number of Gvec
indx=array(range(-Gnum,Gnum+1))
Gvec = []
for n1 in indx:
    for n2 in indx:
        for n3 in indx:
            Gvec.append(n1*b1+n2*b2+n3*b3)
            
#figsize(xfig_meret,yfig_meret)
figsize(6,6)

##  G-X-W-L-G-K-U-X line
#specpoints = array([Gp,Xp,Wp,Lp,Gp,Kp,Up,Xp])
#specpoints =  array([Lp,Gp,Xp,Up,Kp,Gp,Wp])
specpoints = array([Lp,Gp,Xp,Up,Kp,Gp])  #  Solyom konyvben: II. kotet, 20.1. abra
                                         #  Az  U,K pontok egybe!!!!! 

## FIGYELEM: fcc racs eseten az irodalomban az U,K jeloles azt jelenti, hogy 
## U-K vonal menten NEM rajzoljuk ki a savot!!!!!

###  kiiratashoz, az x-tengelyen:
specNev_map = {tuple(Gp):"$\Gamma$",tuple(Xp):"$X$",tuple(Wp):"$W$",
               tuple(Lp):"$L$",tuple(Up):"$U,K$",tuple(Kp):"$\Gamma$"}

    
klist = []
specpos = [0]
kk = [0]
tmp = 0
for i in (range(len(specpoints)-1)):
    if not i==3:   ########## Az  U,K pontok egybe!!!!! 
        sl = specpoints[i+1]-specpoints[i]  
        sl_hossz = sqrt(dot(sl,sl))
        dk = sl/Npoints
        for num in arange(0,Npoints):
           # k vector along the line given by speclines:
             klist.append(specpoints[i] + num*dk)
           # length of the k vector and shifted: 
             tmp +=  sqrt(dot(dk,dk)) 
             kk.append(tmp) 
        specpos.append(tmp)

klist.append(klist[-1]+dk)   

enlist = []
for i in klist:
    enlist.append(free_en(i, Gvec))

enlist= array(enlist)

eigszam= len(enlist[0,:])
print("The # of eigenvalues = ",eigszam,"= # of G vectors =",len(Gvec))



# drawing the figure
figsize(xfig_meret,yfig_meret)

for ii in range(0,len(enlist[0,:])):
    plot(kk,enlist[:,ii],color='r')

i = 0
for xc in specpos:
    plt.axvline(x=xc,color='b')
    text(xc*0.95,-0.35,specNev_map[tuple(specpoints[i])],fontsize=xylabel_meret)
    i=i+1

###  Brillouin zone Volume: 
VBZ= dot(b3,cross(b1,b2))
print("Volume of the Brilouin zone = ", VBZ,"\n")

###  Fermi energy: 
EF_vec = []
for n in range(1,9):
    tmp = (3/8/pi*VBZ*n)**(2/3)
    EF_vec.append(tmp)
    print("Electrons per unit cell = ", n, ", Fermi energy = ",round(tmp,3))

## horizontal line at Fermi energies:
i=1
for ef in EF_vec:
    plt.axhline(y=ef, color='b',ls='--') 
    nel = str(i)
    text(specpos[-1]*1.05,ef*0.97,nel,fontsize=10)
    i +=1

    
ylabel(r'$E(k)$',fontsize=xylabel_meret)

#  kikapcsoljuk a xticks: 
xticks([], [])

xlim(0,specpos[-1])
ylim(0,ymax)

title("fcc cubic",fontsize=xylabel_meret);

grid();



#savefig('Fig_free_LGXU-KG.png');  # Abra kimentese
The # of eigenvalues =  125 = # of G vectors = 125
Volume of the Brilouin zone =  4 

Electrons per unit cell =  1 , Fermi energy =  0.611
Electrons per unit cell =  2 , Fermi energy =  0.97
Electrons per unit cell =  3 , Fermi energy =  1.271
Electrons per unit cell =  4 , Fermi energy =  1.539
Electrons per unit cell =  5 , Fermi energy =  1.786
Electrons per unit cell =  6 , Fermi energy =  2.017
Electrons per unit cell =  7 , Fermi energy =  2.235
Electrons per unit cell =  8 , Fermi energy =  2.444
In [11]:
## calculation of degeneracy 

print("\nDegeneracy at the special k points without Dirac delta potential: \n=================================\n")
i=0
for sp in specpoints:
    se = free_en(sp, Gvec)
    sajatertekek =[ round(x,2) for x in se]
    
    deg=collections.Counter(sajatertekek);
    
    keys = sorted(deg.keys())
    
    print("\nDegeneracies in the %s point:" % specNev_map[tuple(specpoints[i])])
    for element in keys:
        print("Energy: %.2f, degeneracy: %d" % ( element, deg[element]))
    
    i +=1

print("\n")
Degeneracy at the special k points without Dirac delta potential: 
=================================


Degeneracies in the $L$ point:
Energy: 0.75, degeneracy: 2
Energy: 2.75, degeneracy: 6
Energy: 4.75, degeneracy: 6
Energy: 6.75, degeneracy: 8
Energy: 8.75, degeneracy: 12
Energy: 10.75, degeneracy: 6
Energy: 12.75, degeneracy: 9
Energy: 14.75, degeneracy: 9
Energy: 16.75, degeneracy: 3
Energy: 18.75, degeneracy: 13
Energy: 20.75, degeneracy: 9
Energy: 22.75, degeneracy: 6
Energy: 24.75, degeneracy: 9
Energy: 30.75, degeneracy: 3
Energy: 32.75, degeneracy: 6
Energy: 34.75, degeneracy: 6
Energy: 36.75, degeneracy: 6
Energy: 42.75, degeneracy: 3
Energy: 46.75, degeneracy: 3

Degeneracies in the $\Gamma$ point:
Energy: 0.00, degeneracy: 1
Energy: 3.00, degeneracy: 8
Energy: 4.00, degeneracy: 6
Energy: 8.00, degeneracy: 12
Energy: 11.00, degeneracy: 24
Energy: 12.00, degeneracy: 8
Energy: 16.00, degeneracy: 6
Energy: 19.00, degeneracy: 12
Energy: 20.00, degeneracy: 12
Energy: 24.00, degeneracy: 6
Energy: 27.00, degeneracy: 6
Energy: 32.00, degeneracy: 6
Energy: 35.00, degeneracy: 12
Energy: 44.00, degeneracy: 6

Degeneracies in the $X$ point:
Energy: 1.00, degeneracy: 2
Energy: 2.00, degeneracy: 4
Energy: 5.00, degeneracy: 8
Energy: 6.00, degeneracy: 8
Energy: 9.00, degeneracy: 10
Energy: 10.00, degeneracy: 8
Energy: 13.00, degeneracy: 6
Energy: 14.00, degeneracy: 12
Energy: 17.00, degeneracy: 11
Energy: 18.00, degeneracy: 7
Energy: 21.00, degeneracy: 6
Energy: 22.00, degeneracy: 2
Energy: 25.00, degeneracy: 5
Energy: 26.00, degeneracy: 8
Energy: 29.00, degeneracy: 4
Energy: 30.00, degeneracy: 4
Energy: 33.00, degeneracy: 4
Energy: 34.00, degeneracy: 2
Energy: 38.00, degeneracy: 3
Energy: 41.00, degeneracy: 4
Energy: 42.00, degeneracy: 2
Energy: 46.00, degeneracy: 2
Energy: 49.00, degeneracy: 2
Energy: 57.00, degeneracy: 1

Degeneracies in the $U,K$ point:
Energy: 1.12, degeneracy: 3
Energy: 2.12, degeneracy: 2
Energy: 3.12, degeneracy: 1
Energy: 4.12, degeneracy: 4
Energy: 5.12, degeneracy: 2
Energy: 6.12, degeneracy: 8
Energy: 7.12, degeneracy: 4
Energy: 8.12, degeneracy: 2
Energy: 9.12, degeneracy: 8
Energy: 11.12, degeneracy: 4
Energy: 12.12, degeneracy: 6
Energy: 13.12, degeneracy: 2
Energy: 14.12, degeneracy: 4
Energy: 15.12, degeneracy: 7
Energy: 16.12, degeneracy: 4
Energy: 17.12, degeneracy: 3
Energy: 18.12, degeneracy: 4
Energy: 19.12, degeneracy: 8
Energy: 20.12, degeneracy: 2
Energy: 22.12, degeneracy: 6
Energy: 23.12, degeneracy: 2
Energy: 24.12, degeneracy: 2
Energy: 25.12, degeneracy: 3
Energy: 27.12, degeneracy: 2
Energy: 28.12, degeneracy: 10
Energy: 31.12, degeneracy: 1
Energy: 32.12, degeneracy: 2
Energy: 33.12, degeneracy: 2
Energy: 35.12, degeneracy: 3
Energy: 37.12, degeneracy: 3
Energy: 39.12, degeneracy: 2
Energy: 40.12, degeneracy: 2
Energy: 43.12, degeneracy: 2
Energy: 44.12, degeneracy: 2
Energy: 47.12, degeneracy: 2
Energy: 55.12, degeneracy: 1

Degeneracies in the $\Gamma$ point:
Energy: 1.12, degeneracy: 3
Energy: 2.12, degeneracy: 2
Energy: 3.12, degeneracy: 1
Energy: 4.12, degeneracy: 4
Energy: 5.12, degeneracy: 2
Energy: 6.12, degeneracy: 8
Energy: 7.12, degeneracy: 4
Energy: 8.12, degeneracy: 2
Energy: 9.12, degeneracy: 8
Energy: 11.12, degeneracy: 2
Energy: 12.12, degeneracy: 8
Energy: 13.12, degeneracy: 4
Energy: 14.12, degeneracy: 2
Energy: 15.12, degeneracy: 9
Energy: 17.12, degeneracy: 4
Energy: 18.12, degeneracy: 8
Energy: 19.12, degeneracy: 3
Energy: 20.12, degeneracy: 4
Energy: 22.12, degeneracy: 4
Energy: 23.12, degeneracy: 4
Energy: 24.12, degeneracy: 4
Energy: 25.12, degeneracy: 1
Energy: 26.12, degeneracy: 2
Energy: 27.12, degeneracy: 4
Energy: 28.12, degeneracy: 2
Energy: 30.12, degeneracy: 4
Energy: 31.12, degeneracy: 2
Energy: 33.12, degeneracy: 4
Energy: 34.12, degeneracy: 2
Energy: 39.12, degeneracy: 7
Energy: 42.12, degeneracy: 4
Energy: 51.12, degeneracy: 3

Degeneracies in the $\Gamma$ point:
Energy: 0.00, degeneracy: 1
Energy: 3.00, degeneracy: 8
Energy: 4.00, degeneracy: 6
Energy: 8.00, degeneracy: 12
Energy: 11.00, degeneracy: 24
Energy: 12.00, degeneracy: 8
Energy: 16.00, degeneracy: 6
Energy: 19.00, degeneracy: 12
Energy: 20.00, degeneracy: 12
Energy: 24.00, degeneracy: 6
Energy: 27.00, degeneracy: 6
Energy: 32.00, degeneracy: 6
Energy: 35.00, degeneracy: 12
Energy: 44.00, degeneracy: 6


Results below are the same as in Ashcroft & Mermin: Solid State Physics

https://www.amazon.com/Solid-State-Physics-Neil-Ashcroft/dp/0030839939

In [12]:
## fcc lattice:

#  Ashcroft & Mermin: Solid State Physics 

Npoints = 70;  ## hany pontbol keszul a gorbe
ymax = 4.5;

## unit cell vectors of the reciprocal vectors:
##  in units of 2 pi/a

b1 = array([-1,1,1])
b2 = array([1,-1,1])
b3 = array([1,1,-1])

## high symmetry points in the Brillouin zone
## FONTOS: a szomszedos spec. k pontokat kell venni 
## (ezek most nem a fenti abranak megfelelo pontok, de szomszedos pontok, 
## es igy jo az abra)
Gp = array([0,0,0])
Xp = array([0,1,0])
Wp = array([1/2,1,0])
Kp = array([3/4,3/4,0])
Lp = array([1/2,1/2,1/2])
Up = array([1/4,1,1/4])


# creating the reciprocal vectors: 
Gnum = 2  #### (2*Gnum+1)**3, number of Gvec
indx=array(range(-Gnum,Gnum+1))
Gvec = []
for n1 in indx:
    for n2 in indx:
        for n3 in indx:
            Gvec.append(n1*b1+n2*b2+n3*b3)
            
#figsize(xfig_meret,yfig_meret)
figsize(6,6)

##  G-X-W-L-G-K-U-X line
specpoints = array([Gp,Xp,Wp,Lp,Gp,Kp,Up,Xp])
#specpoints =  array([Lp,Gp,Xp,Up,Kp,Gp,Wp])
#specpoints = array([Lp,Gp,Xp,Up,Kp,Gp])  #  Solyom konyvben: II. kotet, 20.1. abra
                                         #  Az  U,K pontok egybe!!!!! 

## FIGYELEM: fcc racs eseten az irodalomban az U,K jeloles azt jelenti, hogy 
## U-K vonal menten NEM rajzoljuk ki a savot!!!!!

###  kiiratashoz, az x-tengelyen:
#specNev_map = {tuple(Gp):"$\Gamma$",tuple(Xp):"$X$",tuple(Wp):"$W$",tuple(Lp):"$L$",tuple(Up):"$U,K$",tuple(Kp):"$\Gamma$"}

specNev_map = {tuple(Gp):"$\Gamma$",tuple(Xp):"$X$",tuple(Wp):"$W$",
               tuple(Lp):"$L$",tuple(Gp):"$\Gamma$",
               tuple(Kp):"$K$",tuple(Up):"$X$"}

    
klist = []
specpos = [0]
kk = [0]
tmp = 0
for i in (range(len(specpoints)-1)):
    if not i==5:   ########## Az  U,K pontok egybe!!!!! 
        sl = specpoints[i+1]-specpoints[i]  
        sl_hossz = sqrt(dot(sl,sl))
        dk = sl/Npoints
        for num in arange(0,Npoints):
           # k vector along the line given by speclines:
             klist.append(specpoints[i] + num*dk)
           # length of the k vector and shifted: 
             tmp +=  sqrt(dot(dk,dk)) 
             kk.append(tmp) 
        specpos.append(tmp)

klist.append(klist[-1]+dk)   

enlist = []
for i in klist:
    enlist.append(free_en(i, Gvec))

enlist= array(enlist)

eigszam= len(enlist[0,:])
print("The # of eigenvalues = ",eigszam,"= # of G vectors =",len(Gvec))

## calculation of degeneracy 


# drawing the figure
figsize(xfig_meret,yfig_meret)

for ii in range(0,len(enlist[0,:])):
    plot(kk,enlist[:,ii],color='r')

i = 0
for xc in specpos:
    plt.axvline(x=xc,color='b')
    text(xc,-0.35,specNev_map[tuple(specpoints[i])],fontsize=xylabel_meret)
    i=i+1

###  Brillouin zone Volume: 
VBZ= dot(b3,cross(b1,b2))
print("Volume of the Brilouin zone = ", VBZ,"\n")

###  Fermi energy: 
EF_vec = []
for n in range(1,9):
    tmp = (3/8/pi*VBZ*n)**(2/3)
    EF_vec.append(tmp)
    print("Electrons per unit cell = ", n, ", Fermi energy = ",round(tmp,3))

## horizontal line at Fermi energies:
i=1
for ef in EF_vec:
    plt.axhline(y=ef, color='b',ls='--') 
    nel = str(i)
    text(specpos[-1]*1.05,ef*0.97,nel,fontsize=10)
    i +=1

    
ylabel(r'$E(k)$',fontsize=xylabel_meret)

#  kikapcsoljuk a xticks: 
xticks([], [])

xlim(0,specpos[-1])
ylim(0,ymax)

title("fcc, $K,U$ pontok egybe",fontsize=xylabel_meret);

grid();



#savefig('Fig_free_GXWLGK-UX.png');  # Abra kimentese
The # of eigenvalues =  125 = # of G vectors = 125
Volume of the Brilouin zone =  4 

Electrons per unit cell =  1 , Fermi energy =  0.611
Electrons per unit cell =  2 , Fermi energy =  0.97
Electrons per unit cell =  3 , Fermi energy =  1.271
Electrons per unit cell =  4 , Fermi energy =  1.539
Electrons per unit cell =  5 , Fermi energy =  1.786
Electrons per unit cell =  6 , Fermi energy =  2.017
Electrons per unit cell =  7 , Fermi energy =  2.235
Electrons per unit cell =  8 , Fermi energy =  2.444
In [13]:
## simple fcc lattice 

Npoints = 50;  ## hany pontbol keszul a gorbe
ymax = 4.2;

w = -0.02 #### w ---> a Dirac-delta potencial erossege, input
params=[w]

print("The # of G vectors = (2*Gnum+1)**3 = ", (2*Gnum+1)**3)
print("w = ",w)


## unit cell vectors of the reciprocal vectors:
##  in units of 2 pi/a

b1 = array([-1,1,1])
b2 = array([1,-1,1])
b3 = array([1,1,-1])

## high symmetry points in the Brillouin zone
## FONTOS: a szomszedos spec. k pontokat kell venni 
## (ezek most nem a fenti abranak megfelelo pontok, de szomszedos pontok, 
## es igy jo az abra)
Gp = array([0,0,0])
Xp = array([0,1,0])
Wp = array([1/2,1,0])
Kp = array([3/4,3/4,0])
Lp = array([1/2,1/2,1/2])
Up = array([1/4,1,1/4])



# creating the reciprocal vectors: 
Gnum = 2  #### (2*Gnum+1)**3, number of Gvec
indx=array(range(-Gnum,Gnum+1))
Gvec = []
for n1 in indx:
    for n2 in indx:
        for n3 in indx:
            Gvec.append(n1*b1+n2*b2+n3*b3)

specNev_map = {tuple(Gp):"$\Gamma$",tuple(Xp):"$X$",tuple(Wp):"$W$",
               tuple(Lp):"$L$",tuple(Kp):"$K$",tuple(Up):"$U$"}

figsize(xfig_meret,yfig_meret)

##  G-X-W-L-G-K-X line
#specpoints = array([Gp,Xp,Wp,Lp,Gp,Kp,Xp])
#specpoints =  array([Lp,Gp,Xp,Up,Kp,Gp,Wp])
specpoints = array([Lp,Gp,Xp,Up,Kp,Gp])  #  Solyom konyvben: II. kotet, 20.1. abra
                                         #  Az  U,K pontok egybe!!!!! 

## FIGYELEM: fcc racs eseten az irodalomban az U,K jeloles azt jelenti, hogy 
## U-K vonal menten NEM rajzoljuk ki a savot!!!!!

###  kiiratashoz, az x-tengelyen:
specNev_map = {tuple(Gp):"$\Gamma$",tuple(Xp):"$X$",tuple(Wp):"$W$",
               tuple(Lp):"$L$",tuple(Up):"$U,K$",tuple(Kp):"$\Gamma$"}

    

klist = []
specpos = [0]
kk = [0]
tmp = 0
for i in (range(len(specpoints)-1)):
    if not i==3:   ########## Az  U,K pontok egybe!!!!! 
        sl = specpoints[i+1]-specpoints[i]  
        sl_hossz = sqrt(dot(sl,sl))
        dk = sl/Npoints
        for num in arange(0,Npoints):
           # k vector along the line given by speclines:
             klist.append(specpoints[i] + num*dk)
           # length of the k vector and shifted: 
             tmp +=  sqrt(dot(dk,dk)) 
             kk.append(tmp) 
        specpos.append(tmp)

klist.append(klist[-1]+dk)   

enlist = []
for kv in klist:
    enlist.append(free_en(kv, Gvec))

enlist= array(enlist)

enlistw = []
for kv in klist:
    enlistw.append(eigvalsh(Ham_op(kv, Gvec, params)))
    
enlistw= array(enlistw)

eigszam= len(enlist[0,:])
print("The # of eigenvalues = ",eigszam,"= # of G vectors =",len(Gvec))
  
    
# drawing the figure
figsize(10,5)

subplot(121)

for ii in range(0,len(enlist[0,:])):
    plot(kk,enlist[:,ii],color='r')

i = 0
for xc in specpos:
    axvline(x=xc,color='b')
    text(xc-0.1,-0.3,specNev_map[tuple(specpoints[i])],fontsize=xylabel_meret)
    i=i+1
    
ylabel(r'$E(k)$',fontsize=xylabel_meret)

#  kikapcsoljuk a xticks: 
xticks([], [])

xlim(0,specpos[-1])
ylim(0,ymax)

cim = "fcc, w="+str(0)
title(cim,fontsize=xylabel_meret)

grid();


subplot(122)

for ii in range(0,len(enlist[0,:])):
    plot(kk,enlistw[:,ii],color='r')

i = 0
for xc in specpos:
    axvline(x=xc,color='b')
    text(xc-0.1,-0.3,specNev_map[tuple(specpoints[i])],fontsize=xylabel_meret)
    i=i+1
    
#ylabel(r'$E(k)$',fontsize=xylabel_meret)

#  kikapcsoljuk a xticks: 
xticks([], [])

xlim(0,specpos[-1])
ylim(0,ymax)

cim = "fcc, w="+str(w)
title(cim,fontsize=xylabel_meret)

grid();

#savefig('Fig_free_quasi_LGXU-KG.png');  # Abra kimentese
The # of G vectors = (2*Gnum+1)**3 =  125
w =  -0.02
The # of eigenvalues =  125 = # of G vectors = 125
In [14]:
free_en([0,0,0], Gvec)
Out[14]:
array([ 0,  3,  3,  3,  3,  3,  3,  3,  3,  4,  4,  4,  4,  4,  4,  8,  8,
        8,  8,  8,  8,  8,  8,  8,  8,  8,  8, 11, 11, 11, 11, 11, 11, 11,
       11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
       12, 12, 12, 12, 12, 12, 12, 12, 16, 16, 16, 16, 16, 16, 19, 19, 19,
       19, 19, 19, 19, 19, 19, 19, 19, 19, 20, 20, 20, 20, 20, 20, 20, 20,
       20, 20, 20, 20, 24, 24, 24, 24, 24, 24, 27, 27, 27, 27, 27, 27, 32,
       32, 32, 32, 32, 32, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
       44, 44, 44, 44, 44, 44])
In [15]:
##  Az K es U points nem teljesen azonosak:

free_en(Kp, Gvec),free_en(Up, Gvec)
Out[15]:
(array([  1.125,   1.125,   1.125,   2.125,   2.125,   3.125,   4.125,
          4.125,   4.125,   4.125,   5.125,   5.125,   6.125,   6.125,
          6.125,   6.125,   6.125,   6.125,   6.125,   6.125,   7.125,
          7.125,   7.125,   7.125,   8.125,   8.125,   9.125,   9.125,
          9.125,   9.125,   9.125,   9.125,   9.125,   9.125,  11.125,
         11.125,  12.125,  12.125,  12.125,  12.125,  12.125,  12.125,
         12.125,  12.125,  13.125,  13.125,  13.125,  13.125,  14.125,
         14.125,  15.125,  15.125,  15.125,  15.125,  15.125,  15.125,
         15.125,  15.125,  15.125,  17.125,  17.125,  17.125,  17.125,
         18.125,  18.125,  18.125,  18.125,  18.125,  18.125,  18.125,
         18.125,  19.125,  19.125,  19.125,  20.125,  20.125,  20.125,
         20.125,  22.125,  22.125,  22.125,  22.125,  23.125,  23.125,
         23.125,  23.125,  24.125,  24.125,  24.125,  24.125,  25.125,
         26.125,  26.125,  27.125,  27.125,  27.125,  27.125,  28.125,
         28.125,  30.125,  30.125,  30.125,  30.125,  31.125,  31.125,
         33.125,  33.125,  33.125,  33.125,  34.125,  34.125,  39.125,
         39.125,  39.125,  39.125,  39.125,  39.125,  39.125,  42.125,
         42.125,  42.125,  42.125,  51.125,  51.125,  51.125]),
 array([  1.125,   1.125,   1.125,   2.125,   2.125,   3.125,   4.125,
          4.125,   4.125,   4.125,   5.125,   5.125,   6.125,   6.125,
          6.125,   6.125,   6.125,   6.125,   6.125,   6.125,   7.125,
          7.125,   7.125,   7.125,   8.125,   8.125,   9.125,   9.125,
          9.125,   9.125,   9.125,   9.125,   9.125,   9.125,  11.125,
         11.125,  11.125,  11.125,  12.125,  12.125,  12.125,  12.125,
         12.125,  12.125,  13.125,  13.125,  14.125,  14.125,  14.125,
         14.125,  15.125,  15.125,  15.125,  15.125,  15.125,  15.125,
         15.125,  16.125,  16.125,  16.125,  16.125,  17.125,  17.125,
         17.125,  18.125,  18.125,  18.125,  18.125,  19.125,  19.125,
         19.125,  19.125,  19.125,  19.125,  19.125,  19.125,  20.125,
         20.125,  22.125,  22.125,  22.125,  22.125,  22.125,  22.125,
         23.125,  23.125,  24.125,  24.125,  25.125,  25.125,  25.125,
         27.125,  27.125,  28.125,  28.125,  28.125,  28.125,  28.125,
         28.125,  28.125,  28.125,  28.125,  28.125,  31.125,  32.125,
         32.125,  33.125,  33.125,  35.125,  35.125,  35.125,  37.125,
         37.125,  37.125,  39.125,  39.125,  40.125,  40.125,  43.125,
         43.125,  44.125,  44.125,  47.125,  47.125,  55.125]))

Free electron bands for bcc lattice

Brillouin zone with high symmetry $\mathbf{k}$ points

In [16]:
## bcc lattice:

Npoints = 50;  ## hany pontbol keszul a gorbe
ymax = 1.4;

## unit cell vectors of the reciprocal vectors:
##  in units of 2 pi/a

b1 = 0.5*array([0,1,1])
b2 = 0.5*array([1,0,1])
b3 = 0.5*array([1,1,0])

## high symmetry points in the Brillouin zone
## FONTOS: a szomszedos spec. k pontokat kell venni 
## (ezek most nem a fenti abranak megfelelo pontok, de szomszedos pontok, 
## es igy jo az abra)
Gp = array([0,0,0])
Hp = 0.5*array([0,1,0])
Pp = 0.25*array([1,1,1])
Np = 0.25*array([1,1,0])
        
# creating the reciprocal vectors: 
Gnum = 2  #### (2*Gnum+1)**3, number of Gvec
indx=array(range(-Gnum,Gnum+1))
Gvec = []
for n1 in indx:
    for n2 in indx:
        for n3 in indx:
            Gvec.append(n1*b1+n2*b2+n3*b3)

specNev_map = {tuple(Gp):"$\Gamma$",tuple(Hp):"$H$",tuple(Pp):"$P$",
               tuple(Np):"$N$"}
            
figsize(xfig_meret,yfig_meret)

##  G-H-N-G-P-H line

specpoints = array([Gp,Hp,Np,Gp,Pp,Hp])

klist = []
specpos = [0]
kk = [0]
tmp = 0
for i in (range(len(specpoints)-1)):
    sl = specpoints[i+1]-specpoints[i]  
    sl_hossz = sqrt(dot(sl,sl))
    dk = sl/Npoints
    for num in arange(0,Npoints):
        # k vector along the line given by speclines:
        klist.append(specpoints[i] + num*dk)
        # length of the k vector and shifted: 
        tmp +=  sqrt(dot(dk,dk)) 
        kk.append(tmp) 
    specpos.append(tmp)

klist.append(klist[-1]+dk)   

enlist = []
for i in klist:
    enlist.append(free_en(i, Gvec))

enlist= array(enlist)

eigszam= len(enlist[0,:])
print("The # of eigenvalues = ",eigszam,"= # of G vectors =",len(Gvec))



# drawing the figure
figsize(xfig_meret,yfig_meret)

for ii in range(0,len(enlist[0,:])):
    plot(kk,enlist[:,ii],color='r')

i = 0
for xc in specpos:
    plt.axvline(x=xc,color='b')
    text(xc*0.95,-0.1,specNev_map[tuple(specpoints[i])],fontsize=xylabel_meret)
    i=i+1

###  Brillouin zone Volume: 
VBZ= dot(b3,cross(b1,b2))
print("Volume of the Brilouin zone = ", VBZ,"\n")

###  Fermi energy: 
EF_vec = []
for n in range(1,9):
    tmp = (3/8/pi*VBZ*n)**(2/3)
    EF_vec.append(tmp)
    print("Electrons per unit cell = ", n, ", Fermi energy = ",round(tmp,3))

## horizontal line at Fermi energies:
i=1
for ef in EF_vec:
    plt.axhline(y=ef, color='b',ls='--') 
    nel = str(i)
    text(specpos[-1]*1.05,ef*0.97,nel,fontsize=10)
    i +=1
    
ylabel(r'$E(k)$',fontsize=xylabel_meret)

#  kikapcsoljuk a xticks: 
xticks([], [])

xlim(0,specpos[-1])
ylim(0,ymax)

title("bcc cubic",fontsize=xylabel_meret)

grid();
            
The # of eigenvalues =  125 = # of G vectors = 125
Volume of the Brilouin zone =  0.25 

Electrons per unit cell =  1 , Fermi energy =  0.096
Electrons per unit cell =  2 , Fermi energy =  0.153
Electrons per unit cell =  3 , Fermi energy =  0.2
Electrons per unit cell =  4 , Fermi energy =  0.242
Electrons per unit cell =  5 , Fermi energy =  0.281
Electrons per unit cell =  6 , Fermi energy =  0.318
Electrons per unit cell =  7 , Fermi energy =  0.352
Electrons per unit cell =  8 , Fermi energy =  0.385
In [17]:
## calculation of degeneracy 

print("\nDegeneracy at the special k points without Dirac delta potential: \n=================================\n")
i=0
for sp in specpoints:
    se = free_en(sp, Gvec)
    sajatertekek =[ round(x,2) for x in se]
    
    deg=collections.Counter(sajatertekek);
    
    keys = sorted(deg.keys())
    
    print("\nDegeneracies in the %s point:" % specNev_map[tuple(specpoints[i])])
    for element in keys:
        print("Energy: %.2f, degeneracy: %d" % ( element, deg[element]))
    
    i +=1

print("\n")
Degeneracy at the special k points without Dirac delta potential: 
=================================


Degeneracies in the $\Gamma$ point:
Energy: 0.00, degeneracy: 1
Energy: 0.50, degeneracy: 12
Energy: 1.00, degeneracy: 6
Energy: 1.50, degeneracy: 24
Energy: 2.00, degeneracy: 12
Energy: 2.50, degeneracy: 24
Energy: 3.00, degeneracy: 2
Energy: 3.50, degeneracy: 12
Energy: 4.00, degeneracy: 6
Energy: 4.50, degeneracy: 6
Energy: 5.50, degeneracy: 6
Energy: 6.00, degeneracy: 6
Energy: 8.50, degeneracy: 6
Energy: 12.00, degeneracy: 2

Degeneracies in the $H$ point:
Energy: 0.25, degeneracy: 6
Energy: 0.75, degeneracy: 8
Energy: 1.25, degeneracy: 24
Energy: 2.25, degeneracy: 21
Energy: 2.75, degeneracy: 15
Energy: 3.25, degeneracy: 10
Energy: 4.25, degeneracy: 16
Energy: 4.75, degeneracy: 3
Energy: 5.25, degeneracy: 6
Energy: 6.25, degeneracy: 1
Energy: 6.75, degeneracy: 3
Energy: 7.25, degeneracy: 6
Energy: 8.25, degeneracy: 1
Energy: 10.25, degeneracy: 3
Energy: 10.75, degeneracy: 1
Energy: 14.25, degeneracy: 1

Degeneracies in the $N$ point:
Energy: 0.12, degeneracy: 2
Energy: 0.38, degeneracy: 4
Energy: 0.62, degeneracy: 4
Energy: 0.88, degeneracy: 8
Energy: 1.12, degeneracy: 6
Energy: 1.38, degeneracy: 4
Energy: 1.62, degeneracy: 12
Energy: 1.88, degeneracy: 8
Energy: 2.12, degeneracy: 7
Energy: 2.38, degeneracy: 10
Energy: 2.62, degeneracy: 6
Energy: 2.88, degeneracy: 6
Energy: 3.12, degeneracy: 5
Energy: 3.38, degeneracy: 6
Energy: 3.62, degeneracy: 2
Energy: 4.12, degeneracy: 5
Energy: 4.38, degeneracy: 4
Energy: 4.62, degeneracy: 4
Energy: 4.88, degeneracy: 2
Energy: 5.12, degeneracy: 4
Energy: 5.88, degeneracy: 2
Energy: 6.88, degeneracy: 4
Energy: 7.12, degeneracy: 3
Energy: 7.62, degeneracy: 2
Energy: 10.12, degeneracy: 2
Energy: 10.38, degeneracy: 2
Energy: 14.12, degeneracy: 1

Degeneracies in the $\Gamma$ point:
Energy: 0.00, degeneracy: 1
Energy: 0.50, degeneracy: 12
Energy: 1.00, degeneracy: 6
Energy: 1.50, degeneracy: 24
Energy: 2.00, degeneracy: 12
Energy: 2.50, degeneracy: 24
Energy: 3.00, degeneracy: 2
Energy: 3.50, degeneracy: 12
Energy: 4.00, degeneracy: 6
Energy: 4.50, degeneracy: 6
Energy: 5.50, degeneracy: 6
Energy: 6.00, degeneracy: 6
Energy: 8.50, degeneracy: 6
Energy: 12.00, degeneracy: 2

Degeneracies in the $P$ point:
Energy: 0.19, degeneracy: 4
Energy: 0.69, degeneracy: 12
Energy: 1.19, degeneracy: 12
Energy: 1.69, degeneracy: 16
Energy: 2.19, degeneracy: 24
Energy: 2.69, degeneracy: 3
Energy: 3.19, degeneracy: 15
Energy: 3.69, degeneracy: 9
Energy: 4.19, degeneracy: 3
Energy: 4.69, degeneracy: 1
Energy: 5.19, degeneracy: 9
Energy: 6.19, degeneracy: 6
Energy: 7.69, degeneracy: 3
Energy: 8.19, degeneracy: 3
Energy: 9.19, degeneracy: 1
Energy: 11.19, degeneracy: 3
Energy: 15.19, degeneracy: 1

Degeneracies in the $H$ point:
Energy: 0.25, degeneracy: 6
Energy: 0.75, degeneracy: 8
Energy: 1.25, degeneracy: 24
Energy: 2.25, degeneracy: 21
Energy: 2.75, degeneracy: 15
Energy: 3.25, degeneracy: 10
Energy: 4.25, degeneracy: 16
Energy: 4.75, degeneracy: 3
Energy: 5.25, degeneracy: 6
Energy: 6.25, degeneracy: 1
Energy: 6.75, degeneracy: 3
Energy: 7.25, degeneracy: 6
Energy: 8.25, degeneracy: 1
Energy: 10.25, degeneracy: 3
Energy: 10.75, degeneracy: 1
Energy: 14.25, degeneracy: 1


In [18]:
## simple bcc lattice 

Npoints = 50;  ## hany pontbol keszul a gorbe
ymax = 0.8;

w = -0.005 #### w ---> a Dirac-delta potencial erossege, input
params=[w]

print("The # of G vectors = (2*Gnum+1)*(2*Gnum+1) = ", (2*Gnum+1)*(2*Gnum+1))
print("w = ",w)

## unit cell vectors of the reciprocal vectors:
##  in units of 2 pi/a

b1 = 0.5*array([0,1,1])
b2 = 0.5*array([1,0,1])
b3 = 0.5*array([1,1,0])

## high symmetry points in the Brillouin zone
## FONTOS: a szomszedos spec. k pontokat kell venni 
## (ezek most nem a fenti abranak megfelelo pontok, de szomszedos pontok, 
## es igy jo az abra)
Gp = array([0,0,0])
Hp = 0.5*array([0,1,0])
Pp = 0.25*array([1,1,1])
Np = 0.25*array([1,1,0])

# creating the reciprocal vectors: 
Gnum = 2  #### (2*Gnum+1)**3, number of Gvec
indx=array(range(-Gnum,Gnum+1))
Gvec = []
for n1 in indx:
    for n2 in indx:
        for n3 in indx:
            Gvec.append(n1*b1+n2*b2+n3*b3)

figsize(xfig_meret,yfig_meret)

##  G-H-N-G-P-H line
specpoints = array([Gp,Hp,Np,Gp,Pp,Hp])

klist = []
specpos = [0]
kk = [0]
tmp = 0
for i in (range(len(specpoints)-1)):
    sl = specpoints[i+1]-specpoints[i]  
    sl_hossz = sqrt(dot(sl,sl))
    dk = sl/Npoints
    for num in arange(0,Npoints):
        # k vector along the line given by speclines:
        klist.append(specpoints[i] + num*dk)
        # length of the k vector and shifted: 
        tmp +=  sqrt(dot(dk,dk)) 
        kk.append(tmp) 
    specpos.append(tmp)

klist.append(klist[-1]+dk)   

enlist = []
for kv in klist:
    enlist.append(free_en(kv, Gvec))

enlist= array(enlist)

enlistw = []
for kv in klist:
    enlistw.append(eigvalsh(Ham_op(kv, Gvec, params)))
    
enlistw= array(enlistw)

eigszam= len(enlist[0,:])
print("The # of eigenvalues = ",eigszam,"= # of G vectors =",len(Gvec))
    
# drawing the figure
figsize(10,5)

subplot(121)

for ii in range(0,len(enlist[0,:])):
    plot(kk,enlist[:,ii],color='r')

i = 0
for xc in specpos:
    axvline(x=xc,color='b')
    text(xc,-0.05,specNev_map[tuple(specpoints[i])],fontsize=xylabel_meret)
    i=i+1
    
ylabel(r'$E(k)$',fontsize=xylabel_meret)

#  kikapcsoljuk a xticks: 
xticks([], [])

xlim(0,specpos[-1])
ylim(0,ymax)

cim = "bcc, w="+str(0)
title(cim,fontsize=xylabel_meret)

grid();


subplot(122)

for ii in range(0,len(enlist[0,:])):
    plot(kk,enlistw[:,ii],color='r')

i = 0
for xc in specpos:
    axvline(x=xc,color='b')
    text(xc,-0.05,specNev_map[tuple(specpoints[i])],fontsize=xylabel_meret)
    i=i+1
    
ylabel(r'$E(k)$',fontsize=xylabel_meret)

#  kikapcsoljuk a xticks: 
xticks([], [])

xlim(0,specpos[-1])
ylim(0,ymax)

cim = "bcc, w="+str(w)
title(cim,fontsize=xylabel_meret)

grid();
The # of G vectors = (2*Gnum+1)*(2*Gnum+1) =  25
w =  -0.005
The # of eigenvalues =  125 = # of G vectors = 125
In [19]:
#tick_params(
#    axis='x',          # changes apply to the x-axis
#    which='both',      # both major and minor ticks are affected
#    bottom='off',      # ticks along the bottom edge are off
#    top='off',         # ticks along the top edge are off
#    labelbottom='off') # labels along the bottom edge are off
In [ ]:
 
In [ ]: